三、启动方式
EM20-DK 支持多种启动方式,包括:
- 从 Micro SD 启动:预装有操作系统的 Micro SD
- 从 eMMC 启动: eMMC 设备经过镜像烧录后启动
- 从网络 PXE 启动: 预装有操作系统的 Micro SD 或 eMMC
- 从网络 NFS 启动: 预装有操作系统的 Micro SD 或 eMMC
3.1 Micro SD 启动
开发板出厂时通常会附带一张预装操作系统的 Micro SD 启动卡。该启动卡不仅能够启动开发板,还提供了一些比较基础的可执行程序。用户可以通过探索这些程序了解开发板的基本功能,从而建立对开发板和 SDK 的初步认知。
如需制作新的启动卡或替换现有启动卡,请按照以下步骤操作:
3.1.1 下载镜像
获取镜像的流程如下:
- 获取 SDK 镜像包
- 解压镜像包,在
ta-image/firmware目录下提取其中的sdcard.img文件作为烧录文件
3.1.2 使用 balenaEtcher 烧录镜像
我们推荐使用 balenaEtcher 来烧录镜像,这是一款在 macOS、Windows 和 Linux 系统均可使用的镜像烧录工具。
烧录镜像的具体步骤如下:
-
选择镜像
打开 balenaEtcher,点击 从文件烧录。
从弹出的窗口中选择刚下载的
sdcard.img,选择之后的界面如图。
-
选择 SD 卡
点击 选择目标磁盘,勾选目标 SD 卡,然后点击 选定。
此时界面如下图所示。
-
开始烧录
点击 现在烧录。
烧录过程中界面如下。
烧录完成后会出现 正在验证 的界面。
💡 提示:
- 如果觉得验证比较耗时,可以点击“跳过”,不会影响烧录。
-
烧录完成
烧录完成后会出现 烧录成功 的提示界面。
3.1.3 检查启动卡
制作完烧录卡后,将卡插入 Ubuntu 系统,可以发现出现 2 个分区(bootfs 分区和 rootfs 分区),具体定义如下:
- 启动分区(盘符名 bootfs)
启动分区用于存储系统启动过程中所需的各类文件,包括引导程序、内核镜像等。该启动分区通常采用 FAT32 文件系统格式,以确保兼容性。启动分区包含的主要文件说明如下:
kernel.itb:内核镜像文件u-boot.itb:引导程序文件fw_jump.bin:固件文件(如果适用)
- 根文件系统分区(盘符名 rootfs)
根文件系统分区是 Micro SD 卡上用于存储操作系统核心文件的重要区域,是文件系统的最高层级目录,包括系统的命令库、配置文件、驱动程序等,根分区通常为 ext4 文件系统格式。
Code block
.
├── bin -> usr/bin # 存放系统的基础命令,如ls、cp、mv等
├── bin.usr-is-merged
├── boot
├── dev # 设备文件,用来与硬件交互
├── etc # 存放系统配置文件,如网络配置、用户配置等
├── home # 存放系统用户的家目录
├── lib -> usr/lib # 存放系统运行所需的共享库文件
├── lib.usr-is-merged
├── media
├── mnt
├── opt
├── proc
├── run
├── sbin -> usr/sbin # 存放系统管理命令
├── sbin.usr-is-merged
├── srv # 存放服务相关的文件
├── sys # 存放系统运行时的信息
├── tmp # 临时文件存放目录
├── usr # 用户应用程序和文件的存放目录
└── var # 存放系统运行时产生的可变数据
完成启动卡制作后,可以参考 「EM20-DK 使用技术手册」文档的「开机」章节 的相关内容启动开发套件。
📝 注意:
如果用户使用的是 Windows 操作系统,则无需手动管理这些分区,安装程序会自动设置,如果需要手动管理这些分区,可以采用 Windows 操作系统自带的磁盘管理工具进行管理。
3.2 eMMC 启动
需要制作一张 Micro SD 烧录卡,并把镜像正确烧录到 eMMC,具体烧录步骤可参考「EM20-DK 使用技术手册」文档的「Micro SD 卡烧录 eMMC 升級」章节 的相关内容。拔出 Micro SD ,按复位键重启即为 eMMC 启动。
3.3 网络 PXE 启动
需要制作一张 Micro SD 烧录卡或者已被正确烧录过的 eMMC,PXE 启动会在仅使用 Boot.fr 和 config.txt 的情况下通过网络去启动系统。
要从网络 PXE 启动,首先需要在电脑端配置 TFTP 和 NFS 服务器,然后开发板端完成配置并启动。
3.3.1 配置 TFTP 服务器
sudo apt-get install tftp-hpa tftpd-hpa
sudo apt-get install xinetd
sudo mkdir -p /pxe_server/tftp
sudo chmod 777 /pxe_server/tftp
修改 /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/pxe_server/tftp"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="-l -c -s"
创建 PXE 目录
sudo mkdir -p /pxe_server/tftp/pxelinux.cfg
创建 PXE 配置文件
在 pxelinux.cfg 目录下创建对应的 PXE 配置文件,文件名格式为 01-xx-xx-xx-xx-xx-xx,其中 01- 为固定字段,后面紧跟开发板的 MAC 地址。
例如,针对 MAC 地址为 e6:e8:dc:ff:db:da 的开发板,应创建文件 /pxe_server/tftp/pxelinux.cfg/01-e6-e8-dc-ff-db-da:
default Ubuntu Linux-6.6
menu title ULTIMATE PXE SERVER - By Griffon - Ver 1.0
prompt 0
timeout 0
label Ubuntu Linux-6.6
kernel uImage
initrd rootfs.cpio.uboot
复制镜像文件
将 Micro SD 卡 bootfs 分区文件 Boot.fr、fw_jump.bin、kernel.itb、rootfs.cpio.uboot、u-boot.itb 和 overlays 目录复制到 /pxe_server/tftp/ 目录下。在开发时可对应替换为自己的镜像文件。
启动 TFTP 服务器
sudo service tftpd-hpa restart
📝 注意:
针对不同开发板要烧录不同内核镜像和设备树,只需在
pxelinux.cfg目录下创建对应的 PXE 配置文件即可。
3.3.2 配置 NFS 服务器
安装 NFS 服务
sudo apt-get install nfs-kernel-server rpcbind
修改 /etc/exports,在文件末尾添加(注意:路径和 * 之间有个空格):
/srv/nfs/rootfs *(rw,sync,no_root_squash)
其中 /srv/nfs/rootfs 为 NFS 文件系统挂载路径。
修改 /etc/default/nfs-kernel-server,在文件末尾添加:
RPCNFSDOPTS="--nfs-version 2,3,4 --debug --syslog"
复制镜像文件
将 Micro SD 卡 rootfs 分区下所有文件及目录复制到 /srv/nfs/rootfs 目录下。在开发时可对应替换为自己定制的文件系统。
启动 NFS 服务
sudo systemctl restart nfs-kernel-server
3.3.3 配置开发板
完成服务器端配置后,需要在开发板端进行相应的网络启动参数配置。开发板通过修改 bootfs 分区下的 config.txt 文件来设置网络启动相关参数,具体配置示例如下:
# 使能PXE
force_pxe=true
# 从eth1启动
ethact=eth1
# 服务器IP地址
serverip=192.168.56.99
# NFS文件系统挂载路径
rootpath=/srv/nfs/rootfs
完成配置文件的修改后,重新上电即可通过网络启动系统。启动成功后,启动日志中会看到打印 Now switch to pxe boot 字样。关于 config.txt 文件中各配置变量的详细说明,请参考「BSP 开发技术手册」文档的「config.txt 使用说明」章节的相关内容。
3.4 网络 NFS 启动
网络 NFS 启动需要准备一张 Micro SD 烧录卡或已正确烧录的 eMMC 设备。NFS 启动会在挂载文件系统时通过网络去加载。开发板端需要修改 bootfs 分区下的 config.txt 文件,具体配置示例如下:
# 必须关闭PXE
force_pxe=false
# 从eth1启动
ethact=eth1
# 服务器IP地址
serverip=192.168.56.99
# NFS文件系统挂载路径
rootpath=/srv/nfs/rootfs
# 使能nfs
nfs=true
完成配置文件的修改后,重新上电即可通过网络挂载文件系统。关于 config.txt 文件中各配置变量的详细说明,请参考「BSP 开发技术手册」文档的「config.txt 使用说明」章节的相关内容。NFS 服务器搭建可参考上述 3.3.2 配置 NFS 服务器 的相关内容。